package com.vt.statusmanager.delta;

import java.io.File;
import java.io.IOException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import com.vt.statusmanager.Preconditions;
import com.vt.statusmanager.data.Manager;
import com.vt.statusmanager.data.Managers;

public class ExelOperation {
	/**
	 * Сохранение записей менеджеров из хранилища данных в эксель-файл
	 * 
	 * @param filePath Путь до генерируемого эксель-файла
	 * @param managers Хранилище с записями менеджеров
	 */
	public static void saveExel(String filePath, Managers managers) {
		Preconditions.notNull(filePath);
		Preconditions.notNull(managers);
		Preconditions.notBlank(filePath);
		try {
			WritableWorkbook simpleWorkbook = Workbook.createWorkbook(new File(filePath));
			int numberOfManagers = 0;
			for (Manager manager : managers.getManagers()) {
				WritableSheet sheet = simpleWorkbook.createSheet(manager.getSecondName(), numberOfManagers);
				numberOfManagers++;
				sheet.addCell(new Label(0, 2, "Порядковый № Недели"));
				sheet.addCell(new Label(1, 2, "Содержание запланированных мероприятий (дел)"));
				sheet.addCell(new Label(2, 2, "Отметка о выполнении"));
				sheet.addCell(new Label(3, 2, "Примечание"));
				int exelString = 0;
				for (int i = manager.getFurstRecord().getNamberWeek(); i < manager.getNumberOfRecords() + manager.getFurstRecord().getNamberWeek(); i++) {
					sheet.addCell(new Label(0, 3 + exelString, Integer.toString(manager.getWeekRecord(i).getNamberWeek())));
					sheet.addCell(new Label(1, 3 + exelString, manager.getWeekRecord(i).getContent()));
					sheet.addCell(new Label(2, 3 + exelString, manager.getWeekRecord(i).getResultData()));
					sheet.addCell(new Label(3, 3 + exelString, manager.getWeekRecord(i).getComments()));
					exelString++;
				}
			}
			simpleWorkbook.write();
			simpleWorkbook.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (RowsExceededException e) {
			e.printStackTrace();
		} catch (WriteException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Загрузить записи в виде объекта managers из эксель-документа с записями менеджеров за прошлый запуск
	 * 
	 * @param filePath Путь до эксель документа
	 */
	public static Managers loadFromExel(String filePath) {
		Preconditions.notNull(filePath);
		Preconditions.notBlank(filePath);
		Managers localBuffer = new Managers();
		try {
			Workbook workbook = Workbook.getWorkbook(new File(filePath));
			for (int managersheet = 0; managersheet < workbook.getNumberOfSheets(); managersheet++) {
				Sheet sheet = workbook.getSheet(managersheet);
				localBuffer.addManager(sheet.getName(), "EMPTY");
				for (int i = 0; i < sheet.getRows() - 3; i++) {
					// Если менеджер удалит строку не быдет вылетать ошибка при таком коде
					if (sheet.getCell(0, i + 3).getContents().trim().equals("")) {
						break;
					}
					localBuffer.getManager(sheet.getName()).setWeekRecord(Integer.parseInt(sheet.getCell(0, i + 3).getContents()), sheet.getCell(1, i + 3).getContents(), sheet.getCell(2, i + 3).getContents(), sheet.getCell(3, i + 3).getContents());
				}
			}
			workbook.close();
			return localBuffer;
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}
